package xymt.novaway.system.service;

/**
 * 通用 数据权限 服务
 *
 * @author NovaWay
 */
public interface ISysDataScopeService {

    /**
     * 获取角色自定义权限
     *
     * @param roleId 角色id
     * @return 部门id组
     */
    String getRoleCustom(Long roleId);

    /**
     * 获取部门及以下权限
     *
     * @param deptId 部门id
     * @return 部门id组
     */
    String getDeptAndChild(Long deptId);

    /**
     * 获取角色数据权限过滤条件
     * <p>
     * 根据角色ID、字段名和权限标识查询数据权限配置，构建对应的SQL过滤条件
     * 支持多种过滤类型：IN、EQ、LIKE、BETWEEN等
     * </p>
     *
     * @param roleId 角色ID
     * @param fieldName 字段名
     * @param permission 权限标识（如：system:user:list），可为空
     * @return SQL过滤条件，如 "status IN ('pending', 'processing')" 或 "1 = 0"（无权限时）
     */
    String getRoleDataScopeFilter(Long roleId, String fieldName, String permission);

    /**
     * 获取角色数据权限过滤条件（兼容性方法）
     * <p>
     * 为了保持向后兼容性，保留原有的方法签名
     * </p>
     *
     * @param roleId 角色ID
     * @param fieldName 字段名
     * @return SQL过滤条件
     */
    default String getRoleDataScopeFilter(Long roleId, String fieldName) {
        return getRoleDataScopeFilter(roleId, fieldName, null);
    }

    /**
     * 获取角色数据权限过滤条件（完全动态版本）
     * <p>
     * 根据角色ID和权限标识，动态查询所有相关的过滤字段配置，
     * 自动组合成完整的SQL过滤条件。无需手动指定字段名。
     * </p>
     *
     * @param roleId 角色ID
     * @param permission 权限标识（如：system:user:list）
     * @return 组合的SQL过滤条件，包含所有配置的字段过滤
     */
    String getRoleDataScopeFilterByPermission(Long roleId, String permission);

    /**
     * 清理角色数据权限配置缓存
     * <p>
     * 当权限配置发生变更时，清理相关的缓存以确保数据一致性
     * </p>
     *
     * @param roleId 角色ID
     */
    void evictRoleDataScopeCache(Long roleId);
    
    /**
     * 清理所有数据权限配置缓存
     */
    void evictAllDataScopeCache();

}
